package javautils;

import android.content.Context;
import android.telephony.TelephonyManager;
/*
 * 用法：
 * 权限<uses-permission android:name="android.permission.READ_PHONE_STATE" />等
 * 第一步：先创建PhoneInfo(Context ctx)对象mPhoneInfo;
 * 然后再，mPhoneInfo.get...
*/
public class PhoneInfo {
	public static TelephonyManager tm;

	public PhoneInfo(Context ctx) {
		tm = (TelephonyManager) ctx.getSystemService(Context.TELEPHONY_SERVICE);
	}

	/*
	 *  * 电话状态： * 1.tm.CALL_STATE_IDLE=0 无活动 * 2.tm.CALL_STATE_RINGING=1 响铃 *
	 * 3.tm.CALL_STATE_OFFHOOK=2 摘机
	 */
	int callState = tm.getCallState();

	/*
	 * IMEI * 唯一的设备ID： * GSM手机的 IMEI 和 CDMA手机的 MEID. * Return null if device ID
	 * is not available.
	 */
	public String getDeviceId() {
		return tm.getDeviceId(); // String
	}

	String operator = tm.getNetworkOperator(); // String
	String operatorName = tm.getNetworkOperatorName();

	/*
	 *  * 服务商名称： (service provider) * 例如：中国移动、联通 (for example China Mobile、Unicom
	 * ) * SIM卡的状态必须是 SIM_STATE_READY(使用getSimState()判断).
	 */
	public String getSimOperatorName() {
		return tm.getSimOperatorName();
	}

	// SIM卡的序列号
	public String getSimSerialNumber() {
		return tm.getSimSerialNumber(); // String
	}

	/*
	 *  * SIM的状态信息： * SIM_STATE_UNKNOWN 未知状态 0 * SIM_STATE_ABSENT 没插卡 1 *
	 * SIM_STATE_PIN_REQUIRED 锁定状态，需要用户的PIN码解锁 2 * SIM_STATE_PUK_REQUIRED
	 * 锁定状态，需要用户的PUK码解锁 3 * SIM_STATE_NETWORK_LOCKED 锁定状态，需要网络的PIN码解锁 4 *
	 * SIM_STATE_READY 就绪状态 5
	 */
	public int getSimState() {
		return tm.getSimState(); // int
	}

	/*
	 * get IMSI * 例如：IMSI(国际移动用户识别码) for a GSM phone. IMSI (for a GSM phone)
	 */
	public String getSubscriberId() {
		return tm.getSubscriberId(); // String
	}

	/*
	 * @if roam (漫游)
	 * 
	 * @return true false
	 */
	public boolean hasNetworkRoaming() {
		return tm.isNetworkRoaming();
	}

	/*
	 *  * 当前使用的网络类型： * 例如： NETWORK_TYPE_UNKNOWN 网络类型未知 0 * NETWORK_TYPE_GPRS
	 * GPRS网络 1 * NETWORK_TYPE_EDGE EDGE网络 2 * NETWORK_TYPE_UMTS UMTS网络 3 *
	 * NETWORK_TYPE_HSDPA HSDPA网络 8 * NETWORK_TYPE_HSUPA HSUPA网络 9 *
	 * NETWORK_TYPE_HSPA HSPA网络 10 * NETWORK_TYPE_CDMA CDMA网络,IS95A 或 IS95B. 4 *
	 * NETWORK_TYPE_EVDO_0 EVDO网络, revision 0. 5 * NETWORK_TYPE_EVDO_A EVDO网络,
	 * revision A. 6 * NETWORK_TYPE_1xRTT 1xRTT网络 7
	 */
	public int getPhoneNetworkType() {
		return tm.getNetworkType(); // int
	}

	/*
	 * 可以写个方法判断下 手机是否有信号 手机类型 PHONE_TYPE_NONE 无信号 (have no signal PHONE_TYPE_GSM
	 * GSM信号 (GSM signal) PHONE_TYPE_CDMA CDMA信号 (CDMA signal)
	 */
	public int getPhoneType() {
		return tm.getPhoneType(); // int
	}

	/*
	 * get SIM Card Number (卡号)
	 */
	public String getPhoneNumeric() {
		return tm.getSimOperator();
	}

	/*
	 * get phone number return string Return null if it is unavailable.
	 */
	public String getPhoneNumber() {
		return tm.getLine1Number();
	}

	/**
	 * 判断是否插入了sim卡 @ if insert in sim card @ return true false
	 */
	public boolean hasSimCard(Context context) {
		TelephonyManager manager = (TelephonyManager) context
				.getSystemService(Context.TELEPHONY_SERVICE);
		boolean flag = false;
		switch (manager.getSimState()) {
		case TelephonyManager.SIM_STATE_ABSENT:
		case TelephonyManager.SIM_STATE_NETWORK_LOCKED:
		case TelephonyManager.SIM_STATE_PIN_REQUIRED:
		case TelephonyManager.SIM_STATE_PUK_REQUIRED:
		case TelephonyManager.SIM_STATE_UNKNOWN:
			flag = false;
			break;
		case TelephonyManager.SIM_STATE_READY:
			flag = true;
			break;
		}
		return flag;
	}
	// 手机屏幕的宽带高度
	
	//获取手机的其他信息，如手机型号
	public String getPhoneOtherInfo() {
		String phoneInfo = "Product: " + android.os.Build.PRODUCT;
		phoneInfo += ", CPU_ABI: " + android.os.Build.CPU_ABI;
		phoneInfo += ", TAGS: " + android.os.Build.TAGS;
		phoneInfo += ", VERSION_CODES.BASE: "
				+ android.os.Build.VERSION_CODES.BASE;
		phoneInfo += ", MODEL: " + android.os.Build.MODEL;//获取当前手机的型号（品牌）
		phoneInfo += ", SDK: " + android.os.Build.VERSION.SDK;//
		phoneInfo += ", VERSION.RELEASE: " + android.os.Build.VERSION.RELEASE;// //获取device的os version 
		phoneInfo += ", DEVICE: " + android.os.Build.DEVICE;
		phoneInfo += ", DISPLAY: " + android.os.Build.DISPLAY;
		phoneInfo += ", BRAND: " + android.os.Build.BRAND;
		phoneInfo += ", BOARD: " + android.os.Build.BOARD;
		phoneInfo += ", FINGERPRINT: " + android.os.Build.FINGERPRINT;
		phoneInfo += ", ID: " + android.os.Build.ID;
		phoneInfo += ", MANUFACTURER: " + android.os.Build.MANUFACTURER;
		phoneInfo += ", USER: " + android.os.Build.USER;
		// Toast.makeText(this, phoneInfo, Toast.LENGTH_LONG).show();
		// TextView t = (TextView) findViewById(R.id.main_phoneinfo);
		// t.setText(phoneInfo);
		return phoneInfo;
	}

//	在开发手机应用时，开发者最关心的是开发的手机软件有多少用户安装，并且正在使用。这就需要识别手机的唯一性。目前我了解的有两种方法，
//	1获取手机的imei号（imei号是唯一识别手机的号码）。getdeviceId()
//	2获取android id号（android id 是手机系统的唯一号码）。
//	获取android id号，如果一个手机设备第一次启动随即产生的一个数字，如果系统改变，该号可能会改变。
//	获取方法：
//	String t=android.provider.Settings.System.getString(getContentResolver(), "android_id"); 
//	      Log.i("huilurry","android_id="+t);
//	好处是所有版本都试用，缺点是可能会和其他机子重复或本机改变
}


